package com.dylan.历史.util;

import java.util.function.BooleanSupplier;

/**
 * @author : ankang
 * @date : 2019/6/14 21:43
 * @Description :
 */
public class RetryUtil {

    /**
     * 重试处理
     * @param supplier 需要执行的操作，返回boolean类型
     * @param executeCount 总共执行的次数
     * @param pauseMillisecond 重试时的间隔时间
     * @param failHandler 重试后失败的处理
     */
    public static void retryHandle(BooleanSupplier supplier, int executeCount, int pauseMillisecond, Runnable failHandler) {
        // 处理状态 -1:初始化/未执行 0:执行失败 1:执行成功
        int handle = -1;
        for (int i = 0; i < executeCount; i++) {
            if (handle == 0) {
                try {
                    Thread.sleep(pauseMillisecond);
                } catch (Exception e) {}
                System.out.println("重试执行第" + i + "次");
            }
            boolean bool = supplier.getAsBoolean();
            if (bool) {
                handle = 1;
                break;
            } else {
                handle = 0;
            }
        }
        // 失败处理
        if (handle != 1) {
            failHandler.run();
        }
    }
}
